package threads;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;

//Set和HashSet数据结构测试
public class SetTest {
    public static void main(String []args)
    {
        //不安全的set线程
        Set<String> unsafeSet= new HashSet<>();
        //安全线程
        Set<String> safeSet1= Collections.synchronizedSet(new HashSet<String>());
        //安全线程
        CopyOnWriteArraySet<String> safeSet2=new CopyOnWriteArraySet<>(new HashSet<String>());
        SetThread set1=new SetThread(unsafeSet);//把数据写入到无序列表Set中
        for(int i=0;i<10;i++)
        {
            Thread t=new Thread(set1,String.valueOf(i));//线程执行都要在Thread线程下才可以start()
            t.start();
        }
        System.out.println("线程数是："+set1.set.size());
        for(String s:set1.set)//遍历的是线程执行数
        {
            System.out.print(s+" ");
        }
        System.out.println();


    }
}
class SetThread implements Runnable
{
    public Set<String>set;//定义一个线程变量
    public SetThread(Set<String>set)
    {
        this.set=set;
    }
    public void run()
    {
        int i=0;
        //开始向Set数据结构中写数据
        while(i<10)
        {
            i++;
            //把当前线程名称加入list中
            set.add(Thread.currentThread().getName()+i);
        }
    }
}
